package org.openfantasia.musica.instruments.jmusic; /**
 * File: org.openfantasia.musica.instruments.jmusic.FGTRInst.java
 * Author: Timothy Opie
 * Created: Wed Nov 12 16:59:02 EST 2003
 */

import jm.audio.io.SampleOut;
import jm.audio.synth.AllFGTR;
import jm.audio.synth.Oscillator;

public final class FGTRInst extends jm.audio.Instrument {
	//----------------------------------------------
	// Attributes
	//----------------------------------------------
	// the name of the sample file

	public int channels = 2, sampleRate = 44100;

	private String fileName;

	private int grainDuration, grainsPerSecond;

	private float bandwidthTop, bandwidthBottom;

	//----------------------------------------------
	// Constructor
	//----------------------------------------------


	public FGTRInst(String fileName, int gDur, float bwTop, float bwBottom, int gps) {
		// Use this constructor when you want to granulate an audio file.
		this.fileName = fileName; //Name of .au file
		this.grainDuration = gDur * ((channels * sampleRate) / 1000); //in milliseconds
		this.bandwidthBottom = bwBottom; //bottom frequency
		this.bandwidthTop = bwTop; //top frequency
		this.grainsPerSecond = gps;
	}

	//----------------------------------------------
	// Methods
	//----------------------------------------------


	/**
	 * Create the Audio Chain for this Instrument
	 * and assign the primary Audio Object(s). The
	 * primary audio object(s) are the one or more
	 * objects which head up the chain(s)
	 */
	public void createChain() {
		// define the chain
		Oscillator sin = new Oscillator(this, 2, 44100, 2);
		//SampleIn sin = new SampleIn(this, fileName);
		//Filter lpf = new Filter(sin, bandwidthBottom, Filter.LOW_PASS);
		//Filter hpf = new Filter(lpf, bandwidthTop, Filter.HIGH_PASS);
		AllFGTR fgtr = new AllFGTR(/*hpf*/sin, grainDuration, bandwidthTop, bandwidthBottom, grainsPerSecond);
		SampleOut sout = new SampleOut(fgtr);
	}
}
